import request from '@/utils/request';

const USER_BASE_URL = '/api/v1/users';

const UserAPI = {
  /**
   * 获取当前登录用户信息
   *
   * @returns 登录用户昵称、头像信息，包括角色和权限
   */
  getInfo() {
    return request<any, UserInfo>({
      url: `/admin/user/info`,
      method: 'get',
    });
  },

  /**
   * 获取用户分页列表
   *
   * @param queryParams 查询参数
   */
  getPage(queryParams: any) {
    return request<any, PageResult<UserPageVO[]>>({
      url: `/admin/user/page`,
      method: 'get',
      params: queryParams,
    });
  },

  /**
   * 根据ID查询用户
   *
   * @param userId 用户ID
   * @returns 用户表单详情
   */
  getFormDataById(userId: number | string) {
    return request<any, UserForm>({
      url: `/admin/user/details/${userId}`,
      method: 'get',
    });
  },

  /**
   * 条件查询用户信息
   *
   * @returns 用户表单详情
   */
  getFormData(data: any) {
    return request<any, UserForm>({
      url: `/admin/user/details`,
      method: 'get',
      data: data,
    });
  },

  /**
   * 添加用户
   *
   * @param data 用户表单数据
   */
  create(data: UserForm) {
    return request({
      url: `/admin/user`,
      method: 'post',
      data: data,
    });
  },

  /**
   * 修改用户
   *
   * @param data 用户表单数据
   */
  update(data: UserForm) {
    return request({
      url: `/admin/user/update`,
      method: 'post',
      data: data,
    });
  },

  /**
   * 批量删除用户信息，多个以英文逗号(,)分割
   *
   * @param ids 用户ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string[]) {
    return request({
      url: `/admin/user/delete`,
      method: 'post',
      data: ids,
    });
  },

  /**
   * 修改当前登录用户密码
   *
   * @param id 用户ID
   * @param password 新密码
   */
  changePassword(data: any) {
    return request({
      url: `/admin/user/password`,
      method: 'post',
      data: data,
    });
  },

  /**
   * 重置用户密码
   *
   * @param id 用户ID
   * @param password 新密码
   */
  resetPassword(userId: string) {
    return request({
      url: `/admin/user/password/reset/${userId}`,
      method: 'post',
    });
  },

  /**
   * 锁定用户
   * @param username
   * @returns
   */
  lockUser(username: string) {
    return request({
      url: `/admin/user/lock/${username}`,
      method: 'post',
    });
  },

  /**
   * 解锁用户
   * @param username
   * @returns
   */
  unlockUser(username: string) {
    return request({
      url: `/admin/user/unlock/${username}`,
      method: 'post',
    });
  },

  /** 下载用户导入模板 */
  downloadTemplate() {
    return request({
      url: `${USER_BASE_URL}/template`,
      method: 'get',
      responseType: 'blob',
    });
  },

  /**
   * 导出用户
   *
   * @param queryParams 查询参数
   */
  export(queryParams: any) {
    return request({
      url: `/admin/user/export`,
      method: 'get',
      params: queryParams,
      responseType: 'blob',
    });
  },

  /**
   * 导入用户
   *
   * @param deptId 部门ID
   * @param file 导入文件
   */
  import(file: File) {
    const formData = new FormData();
    formData.append('file', file);
    return request<any, ExcelResult>({
      url: `/admin/user/import`,
      method: 'post',
      // params: { deptId: deptId },
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },

  /** 修改个人中心用户信息 */
  updateProfile(data: UserProfileForm) {
    return request({
      url: `/admin/user/edit`,
      method: 'post',
      data: data,
    });
  },

  /** 发送短信验证码（绑定或更换手机号）*/
  sendMobileCode(mobile: string) {
    return request({
      url: `${USER_BASE_URL}/mobile/code`,
      method: 'post',
      params: { mobile: mobile },
    });
  },

  /** 发送邮箱验证码（绑定或更换邮箱）*/
  sendEmailCode(email: string) {
    return request({
      url: `${USER_BASE_URL}/email/code`,
      method: 'post',
      params: { email: email },
    });
  },

  /**
   *  获取用户下拉列表
   */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${USER_BASE_URL}/options`,
      method: 'get',
    });
  },
};

export default UserAPI;

// 用户信息
interface SysUser {
  /** 用户ID */
  userId?: string;

  /** 用户名 */
  username?: string;

  /** 密码 */
  password?: string;

  /** 删除标记, 1-已删除, 0-正常 */
  delFlag?: string;
  /** 锁定标记, 0-正常 9-锁定 */
  lockFlag?: string;
  phone?: string;
  avatar?: string;
  companyIds?: string;
  companyIdList: string[] | number[];
  name?: string;
  email?: string;
  createBy?: string;
  createTime?: string;
}
/** 登录用户信息 */
export interface UserInfo {
  /** 用户ID */
  userId?: string;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  name?: string;

  /** 头像URL */
  avatar?: string;

  /** 角色 */
  roles: string[];

  /** 权限 */
  perms: string[];

  /** 公司列表 */
  companyList?: any[];

  /** 公名名称 */
  companyName?: string;

  /** 权限标识 */
  permissions?: any[];

  /** 系统用户信息 */
  sysUser?: SysUser;
}

/**
 * 用户分页查询对象
 */
export interface UserPageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;

  /** 用户状态 */
  status?: number;

  /** 部门ID */
  deptId?: number;

  /** 开始时间 */
  createTime?: [string, string];
  username?: string;
  phone?: string;
  email?: string;
}

/** 用户分页对象 */
export interface UserPageVO {
  /** 用户ID */
  userId: string;
  /** 用户头像URL */
  avatar?: string;
  /** 创建时间 */
  createTime?: Date;
  /** 部门名称 */
  deptName?: string;
  /** 用户邮箱 */
  email?: string;
  /** 性别 */
  gender?: number;
  /** 手机号 */
  phone?: string;
  /** 用户昵称 */
  nickname?: string;
  /** 角色名称，多个使用英文逗号(,)分割 */
  roleNames?: string;
  /** 用户状态(1:启用;0:禁用) */
  status?: number;
  /** 用户名 */
  username?: string;
  /** 锁定标记，0 未锁定，1 已锁定 */
  lockFlag?: string;
  /** 所属单位ID */
  companyId?: string;
  /** 所属单位 */
  companyName?: string;
  roleList?: any[];
  companyList?: CompanyOptionType[];
}
export interface CompanyOptionType {
  id: string;
  name: string;
  code?: string;
  areaId?: string;
  parentId?: string;
  createBy?: string;
  createTime?: string;
  updateBy?: string;
  updateTime?: string;
  children?: any;
}
/** 用户表单类型 */
export interface UserForm {
  /** 用户ID */
  userId?: string;
  /** 用户名 */
  username?: string;
  /** 密码 */
  password?: string | null;
  /** 锁定标记，0 未锁定，1 已锁定 */
  lockFlag?: string;
  /** 手机号 */
  phone?: string;
  /** 用户头像 */
  avatar?: string;
  /** 所属单位ID */
  companyIds?: string;
  /** 公司信息集合	 */
  companyList?: any[];
  companyIdsArr?: string[] | number[];
  /** 昵称 */
  name?: string;
  /** 邮箱 */
  email?: string;
  /** 角色ID集合 */
  roleIds?: number[] | string[];
  role?: number[] | string[];
  newpassword1?: string;
  /** 用户状态(1:正常;0:禁用) */
  status?: number;
  /** 部门ID */
  deptId?: number;
  /** 性别 */
  gender?: number;
}

/** 个人中心用户信息 */
export interface UserProfileVO {
  /** 角色 */
  roles?: string[];

  /** 公司列表 */
  companyList?: any[];

  /** 权限标识 */
  permissions?: any[];

  /** 系统用户信息 */
  sysUser?: SysUser;
}

/** 个人中心用户信息表单 */
export interface UserProfileForm {
  /** 用户ID */
  userId?: string;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  name?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  phone?: string;

  /** 邮箱 */
  email?: string;

  /** 密码 */
  password?: string;
}

/** 修改密码表单 */
export interface PasswordChangeForm {
  /** 原密码 */
  oldPassword?: string;
  /** 原密码 */
  password?: string;
  /** 新密码 */
  newpassword1?: string;
  /** 确认新密码 */
  confirmPassword?: string;
}

/** 修改手机表单 */
export interface MobileUpdateForm {
  /** 手机号 */
  phone?: string;
  /** 验证码 */
  code?: string;
  /** 用户名 */
  username?: string;
}

/** 修改邮箱表单 */
export interface EmailUpdateForm {
  /** 邮箱 */
  email?: string;
  /** 验证码 */
  code?: string;
  /** 用户名 */
  username?: string;
}
